#!/usr/bin/python

import MySQLdb
from leer_config import *

class Singleton(type):

	def __init__(cls, name, bases, dct):
		cls.__instance = None
		type.__init__(cls, name, bases, dct)

	def __call__(cls, *args, **kw):
		if cls.__instance is None:
			cls.__instance = type.__call__(cls, *args,**kw)
		return cls.__instance

class Agente:
	__metaclass__ = Singleton
	#El agente sabe construirse el solito
	#y evitamos tener un puntero al agente
	def __init__(self):
		conexion=leer_bbdd()
		db = MySQLdb.connect(conexion[0], conexion[1], conexion[2], conexion[3])
		self.cursor=db.cursor()
	
	#Insertar un documento en la BD
	def insertar_Documento(self,titulo,ruta):
		mi_query = "INSERT INTO `Documentos` (`id`, `titulo`, `ruta`) VALUES (NULL, '"+str(titulo)+"', '"+str(ruta)+"');"
		self.cursor.execute(mi_query)

	#Borrar un documento de la BD mediante el id
	def borrar_Documento(self,i):
		mi_query= "DELETE FROM `Documentos` WHERE `Documentos`.`id` = "+str(i)+";"
		self.cursor.execute(mi_query)

	#Leer un documento de la BD mediante id
	def get_Documento(self,i):
		mi_query= "SELECT * FROM `Documentos` WHERE `id`="+str(i)+";"
		self.cursor.execute(mi_query)
		resultado=self.cursor.fetchall()
		return resultado

	#Leer un documento de la BD mediante titulo
	def get_Documento_titulo(self,i):
		mi_query= "SELECT * FROM `Documentos` WHERE `titulo`=\""+str(i)+"\";"
		self.cursor.execute(mi_query)
		resultado=self.cursor.fetchall()
		return resultado
	
	#Leer un documento de la BD mediante el path
	def get_Documento_ruta(self,i):
		mi_query= "SELECT * FROM `Documentos` WHERE `ruta`=\""+str(i)+"\";"
		self.cursor.execute(mi_query)
		resultado=self.cursor.fetchall()
		return resultado

	#Leer todos los documentos de la BD
	def get_Documentos(self):
		mi_query= "SELECT * FROM `Documentos`;"
		self.cursor.execute(mi_query)
		resultado=self.cursor.fetchall()
		return resultado

	#Insertar un termino en la tabla Terminos
	def insertar_Termino(self,termino,frec):
		mi_query = "INSERT INTO `Terminos` (`id`, `termino`, `frecuencia`) VALUES (NULL, '"+str(termino)+"', '"+str(frec)+"');"
		self.cursor.execute(mi_query)

	#Insertar un termino en Terminos_doc
	def insertar_Termino_doc(self, i_t, i_d, frec):
		mi_query = "INSERT INTO `Terminos_doc` (`id_termino`, `id_documento`, `frecuencia`) VALUES ('"+str(i_t)+"', '"+str(i_d)+"', '"+str(frec)+"');"
		self.cursor.execute(mi_query)

	def get_Termino(self,i):
		mi_query="SELECT * FROM `Terminos` WHERE `termino`=\""+str(i)+"\";"
		self.cursor.execute(mi_query)
		resultado=self.cursor.fetchall()
		return resultado

	def aumentaFrecTermino(self,i,ter):
		frec=ter[0][2]+1
		mi_query="UPDATE `Terminos` SET `frecuencia` = '"+str(frec)+"' WHERE `termino` =\""+str(i)+"\";"
		self.cursor.execute(mi_query)

	def getTerminoDoc(self,idTermino):
		mi_query="SELECT * FROM `Terminos_doc` WHERE `id_termino`=\""+str(idTermino)+"\";"
		self.cursor.execute(mi_query)
		resultado=self.cursor.fetchall()
		return resultado

	def countDoc(self):
		mi_query = "SELECT COUNT(*) FROM `Documentos`;"
		self.cursor.execute(mi_query)
		return int(self.cursor.fetchall()[0][0])
 
	def getTermino(self,ter):
		mi_query = "SELECT * FROM `Terminos` WHERE `termino` = \""+str(ter)+"\";"
		self.cursor.execute(mi_query)
		try:
			return self.cursor.fetchall()
		except:
			return 0

	def getFrecuenciaTerminoDoc(self,idTer,idDoc):
		mi_query = "SELECT `frecuencia` FROM `Terminos_doc` WHERE `id_termino` = \""+str(idTer)+"\" AND `id_documento` = \""+str(idDoc)+"\";"
		self.cursor.execute(mi_query)
		try:
			return int(self.cursor.fetchall()[0][0])
		except:
			return 0

	def desconectar(self):
		self.cursor.close()
